/*
 * Copyright (c) 2010, Yawning <yawninglol at gmail.com>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   * Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 *
 *   * Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer in the
 *     documentation and/or other materials provided with the distribution.
 *
 *   * Neither the name of the Mew Developers nor the
 *     names of its contributors may be used to endorse or promote products
 *     derived from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
 * THE POSSIBILITY OF SUCH DAMAGE.
 */

package yawning.mew.cat;

import yawning.mew.character.StatLogic;


/**
 * Feral Druid Cat specific level dependent values.
 *
 * @author Yawning <yawninglol at gmail.com>
 */
public class CatStatLogic {
	private double ClawMult;
	private int ClawDmg;
	private double MangleMult;	// WeaponDmg * MangleMult + MangleDmg
	private int MangleDmg;
	private int RakeDmg;		// RakeDmg + AP * RakeDmgCoeff
	private double RakeDmgCoeff;
	private int RakeDotDmg;		// (RakeDotDmg * 3 + AP * 0.09 * 3) total.  (Value is per tick)
	private double RakeDotCoeff;
	private double ShredMult;	// WeaponDmg * ShredMult + ShredDmg
	private int ShredDmg;
	private int RipBaseDmg;		// ((RipBaseDmg + RipCpDmg * nrCPs) * 8 + AP * RipCoeff * nrCPs * 8) total. (2s ticks; 8 ticks)
	private int RipCpDmg;
	private double RipCoeff;
	private int FBBaseDmg;		// FBBaseDmg + FBCpDmg * nrCPs + AP * FBCoeff * nrCPs
	private int FBCpDmg;
	private double FBCoeff;
	private double RavageMult;	// WeaponDmg * RavageMult + RavageDmg
	private int RavageDmg;
	private double PounceCoeff;
	private int PounceDmg;
	private double MaimMult;
	private int MaimBaseDmg;
	private int MaimCpDmg;

	public CatStatLogic(StatLogic sl) {
		this.ClawMult = 1.55;
		this.MangleMult = 5.4;
		this.ShredMult = 5.4;
		this.RavageMult = 9.5;
		this.MaimMult = 1.55;

		this.PounceCoeff = 0.03;
		this.RakeDmgCoeff = 0.147;
		this.RakeDotCoeff = 0.147;
		this.RipCoeff = 0.0207;
		this.FBCoeff = 0.109;

		this.ClawDmg = sl.mStats.get("clawDamage").intValue();
		this.MangleDmg = sl.mStats.get("mangleDamage").intValue();
		this.RakeDmg = sl.mStats.get("rakeDamage").intValue();
		this.RakeDotDmg = sl.mStats.get("rakeDotDamage").intValue();
		this.ShredDmg = sl.mStats.get("shredDamage").intValue();
		this.RipBaseDmg = sl.mStats.get("ripBaseDamage").intValue();
		this.RipCpDmg = sl.mStats.get("ripComboPointDamage").intValue();
		this.FBBaseDmg = sl.mStats.get("ferociousBiteBaseDamage").intValue();
		this.FBCpDmg = sl.mStats.get("ferociousBiteComboPointDamage").intValue();
		this.RavageDmg = sl.mStats.get("mangleDamage").intValue();
		this.PounceDmg = sl.mStats.get("pounceDamage").intValue();
		this.MaimBaseDmg = sl.mStats.get("maimBaseDamage").intValue();
		this.MaimCpDmg = sl.mStats.get("maimComboPointDamage").intValue();
	}

	// Getters/Setters.
	public int getFBBaseDmg() {
		return FBBaseDmg;
	}

	public int getFBCpDmg() {
		return FBCpDmg;
	}

	public int getMaimBaseDmg() {
		return MaimBaseDmg;
	}

	public int getMaimCpDmg() {
		return MaimCpDmg;
	}

	public int getClawDmg() {
		return ClawDmg;
	}

	public int getMangleDmg() {
		return MangleDmg;
	}

	public int getRakeDmg() {
		return RakeDmg;
	}

	public int getRakeDotDmg() {
		return RakeDotDmg;
	}

	public int getRavageDmg() {
		return RavageDmg;
	}

	public int getPounceDmg() {
		return PounceDmg;
	}

	public int getRipBaseDmg() {
		return RipBaseDmg;
	}

	public int getRipCpDmg() {
		return RipCpDmg;
	}

	public int getShredDmg() {
		return ShredDmg;
	}

	public double getPounceCoeff() {
		return PounceCoeff;
	}

	public double getRakeDmgCoeff() {
		return RakeDmgCoeff;
	}

	public double getRakeDotCoeff() {
		return RakeDotCoeff;
	}

	public double getRipCoeff() {
		return RipCoeff;
	}

	public double getFBCoeff() {
		return FBCoeff;
	}

	public double getMaimMult() {
		return MaimMult;
	}

	public double getClawMult() {
		return ClawMult;
	}

	public double getMangleMult() {
		return MangleMult;
	}

	public double getShredMult() {
		return ShredMult;
	}

	public double getRavageMult() {
		return RavageMult;
	}
}
